# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.StorageTransfer.V1.Model.ReplicationSpec do
  @moduledoc """
  Specifies the configuration for a cross-bucket replication job. Cross-bucket replication copies new or updated objects from a source Cloud Storage bucket to a destination Cloud Storage bucket. Existing objects in the source bucket are not copied by a new cross-bucket replication job.

  ## Attributes

  *   `gcsDataSink` (*type:* `GoogleApi.StorageTransfer.V1.Model.GcsData.t`, *default:* `nil`) - The Cloud Storage bucket to which to replicate objects.
  *   `gcsDataSource` (*type:* `GoogleApi.StorageTransfer.V1.Model.GcsData.t`, *default:* `nil`) - The Cloud Storage bucket from which to replicate objects.
  *   `objectConditions` (*type:* `GoogleApi.StorageTransfer.V1.Model.ObjectConditions.t`, *default:* `nil`) - Object conditions that determine which objects are transferred. For replication jobs, only `include_prefixes` and `exclude_prefixes` are supported.
  *   `transferOptions` (*type:* `GoogleApi.StorageTransfer.V1.Model.TransferOptions.t`, *default:* `nil`) - Specifies the metadata options to be applied during replication. Delete options are not supported. If a delete option is specified, the request fails with an INVALID_ARGUMENT error.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :gcsDataSink => GoogleApi.StorageTransfer.V1.Model.GcsData.t() | nil,
          :gcsDataSource => GoogleApi.StorageTransfer.V1.Model.GcsData.t() | nil,
          :objectConditions => GoogleApi.StorageTransfer.V1.Model.ObjectConditions.t() | nil,
          :transferOptions => GoogleApi.StorageTransfer.V1.Model.TransferOptions.t() | nil
        }

  field(:gcsDataSink, as: GoogleApi.StorageTransfer.V1.Model.GcsData)
  field(:gcsDataSource, as: GoogleApi.StorageTransfer.V1.Model.GcsData)
  field(:objectConditions, as: GoogleApi.StorageTransfer.V1.Model.ObjectConditions)
  field(:transferOptions, as: GoogleApi.StorageTransfer.V1.Model.TransferOptions)
end

defimpl Poison.Decoder, for: GoogleApi.StorageTransfer.V1.Model.ReplicationSpec do
  def decode(value, options) do
    GoogleApi.StorageTransfer.V1.Model.ReplicationSpec.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.StorageTransfer.V1.Model.ReplicationSpec do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
